import { ElMessage } from 'element-plus'
import axios from 'axios'
import useUserStore from '@/store/modules/user'
// 对axios进行二次封装
/**
 * 1、liyonganxios请求、相应拦截器功能
 * 2、请求拦截器，一般可以在请求头中携带公共的参数：token
 * 3、响应拦截器，一般可以处理公共的响应数据，如：token过期，跳转到登录页、处理http网络错误，简化服务器返回的数据
 */
let request = axios.create({
  // 基础路径
  baseURL: '/api',
  // 超时时间
  timeout: 5000
})

// 请求拦截器
request.interceptors.request.use(
  (config: any) => {
    // config：请求拦截器回调注入的对象
    // 可以通过请求头携带公共参数-token
    let userStore = useUserStore()
    if (userStore.userInfo) {
      config.headers.token = userStore.userInfo.token
    }
    return config
  },
  (error: any) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  (response: any) => {
    let code = response.data.code
    if (code !== 200) {
      ElMessage({
        type: 'error',
        message: response.data.message
      })
      return Promise.reject(response.data)
    }
    // 简化服务器返回的数据
    return response.data
  },
  (error: any) => {
    // 处理http网络错误，
    let status = error.response.status
    // 错误提示信息
    let message = ''
    switch (status) {
      case 401:
        message = error.message || '未授权'
        break
      case 404:
        message = error.message || '请求资源不存在'
        break
      case 500 | 501 | 502 | 503 | 504 | 505:
        message = error.message || '服务器内部错误'
        break
    }
    ElMessage({
      type: 'error',
      message
    })
    return Promise.reject(error)
  }
)

// 对外暴露axios实例
export default request
